package cc.javaee.bbs.tool;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;


/**
 * 
 * 
 * 平台 时间类，继承Date<br>
 * <br>
 * @author wanghuicheng
 * @LastModified 2012-12-4
 */
public class DateTemplate extends java.util.Date{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	/**
	 * 日期模板
	 */
	public static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd");
	/**
	 * 年月模板
	 */
	public static final SimpleDateFormat DATE_FORMAT_MONTH = new SimpleDateFormat("yyyy-MM");
	/**
	 * 年月模板
	 */
	public static final SimpleDateFormat DATE_FORMAT_MONTHTWO = new SimpleDateFormat("yyyyMM");
	/**
	 * 简单日期模板
	 */
	public static final SimpleDateFormat SIMPLE_DATE_FORMAT = new SimpleDateFormat("yyyyMMdd");

	/**
	 * 时间模板
	 */
	public static final SimpleDateFormat TIME_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	/**
	 * 简单时间模板
	 */
	public static final SimpleDateFormat SIMPLE_TIME_FORMAT = new SimpleDateFormat("yyyyMMddHHmmssSSS");
	
	/**
	 * 简单时间模板 yyyyMMddHHmmss
	 */
	public static final SimpleDateFormat SIMPLE_TIME_FORMAT_SS = new SimpleDateFormat("yyyyMMddHHmmss");
	
	/**
	 * yyyy
	 */
	public static final SimpleDateFormat SIMPLE_TIME_FORMAT_YYYY = new SimpleDateFormat("yyyy");
	/**
	 * MM
	 */
	public static final SimpleDateFormat SIMPLE_TIME_FORMAT_MM = new SimpleDateFormat("MM");
	
	/**
	 * dd
	 */
	public static final SimpleDateFormat SIMPLE_TIME_FORMAT_DD = new SimpleDateFormat("dd");
	
	/**
	 * HH
	 */
	public static final SimpleDateFormat SIMPLE_TIME_FORMAT_HH = new SimpleDateFormat("HH");
	
	/**
	 * mm 分钟
	 */
	public static final SimpleDateFormat SIMPLE_TIME_FORMAT_mm = new SimpleDateFormat("mm");
	
	/**
	 * 时间模板 HH:mm
	 */
	public static final SimpleDateFormat TIME_FORMAT_HHmm = new SimpleDateFormat("HH:mm");
	
	/****
	 * 时间HH:mm:ss
	 **/
	public static final SimpleDateFormat TIME_FORMAT_HHmmss = new SimpleDateFormat("HH:mm:ss");
	

	public DateTemplate(String s) throws ParseException {
		super();
		this.setTime(TIME_FORMAT.parse(s).getTime());
	}
	public DateTemplate(java.util.Date date) {
		super();
		if (null != date) {
			this.setTime(date.getTime());
		}
	}
	
	
	public DateTemplate(long date) {
		super(date);
	}
	public DateTemplate() {
		super();
	}
	public String toSimpleDateStr() {
		return SIMPLE_DATE_FORMAT.format(this);
	}
	
	public String toDateStr() {
		return DATE_FORMAT.format(this);
	}
	
	public String toSimpleTimeStr() {
		return SIMPLE_TIME_FORMAT.format(this);
	}
	
	public String toSimpleTimeStrSs() {
		return SIMPLE_TIME_FORMAT_SS.format(this);
	}
	
	public String toSimpleDateTimeStr() {
		return TIME_FORMAT.format(this);
	}
	
	/**
	 * 获取年
	 * **/
	public String toYyyyStr() {
		return SIMPLE_TIME_FORMAT_YYYY.format(this);
	}
	
	/**
	 * 获取月份
	 * **/
	public String toMmStr() {
		return SIMPLE_TIME_FORMAT_MM.format(this);
	}
	
	/**
	 * 获取天
	 * **/
	public String toddStr() {
		return SIMPLE_TIME_FORMAT_DD.format(this);
	}
	
	/***
	 * 获取小时
	 * **/
	public String toHhStr() {
		return SIMPLE_TIME_FORMAT_HH.format(this);
	}
	
	/**
	 * 获取分钟
	 * **/
	public String tommStr() {
		return SIMPLE_TIME_FORMAT_mm.format(this);
	}
	
	/***
	 * 获取小时和分钟
	 * **/
	public String toHhmmStr()
	{
		return TIME_FORMAT_HHmm.format(this) ;
	}
	
	/***
	 * 获取小时分钟和秒
	 * @return
	 */
	public String toHhmmssStr(){
		return TIME_FORMAT_HHmmss.format(this);
	}
	
	
	public DateTemplate addDate(int date) {
		Calendar cal = Calendar.getInstance() ;
		cal.setTime(this) ;
		cal.add(Calendar.DATE, date) ;
		return new DateTemplate(cal.getTime());
	}
	
	public DateTemplate addDateHourOfDay(int date) {
		Calendar cal = Calendar.getInstance() ;
		cal.setTime(this) ;
		cal.add(Calendar.HOUR_OF_DAY, date) ;
		return new DateTemplate(cal.getTime());
	}
	
	public DateTemplate addDateMinuteOfDay(int minute) {
		Calendar cal = Calendar.getInstance() ;
		cal.setTime(this) ;
		cal.add(Calendar.MINUTE, minute) ;
		return new DateTemplate(cal.getTime());
	}
	
	/***
	 * 增加日期操作,并可以设置 返回的时分秒
	 * @param date int
	 * @param int hh 小时0-59
	 * @param int mm 分0-59
	 * @param int ss 秒0-59
	 * @return Date
	 * ***/
	public DateTemplate addDate(int date, int hh, int mm, int ss) {
		Calendar cal = Calendar.getInstance() ;
		cal.setTime(this) ;
		cal.add(Calendar.DATE, date) ;
		cal.set(cal.get(Calendar.YEAR),
				cal.get(Calendar.MONTH), 
				cal.get(Calendar.DATE), hh, mm, ss) ;
		return new DateTemplate(cal.getTime());
	}
	
	/***
	 * 距离到达结束时间还有多少天 小时 分 秒
	 * @param DateTemplate end 结束时间
	 * @return 返回 距离到达结束时间还有多少天 小时 分 秒
	 * ***/
	public String distanceTime(DateTemplate end)
	{
        long between = 0;
        try {
            between = (end.getTime() - this.getTime());// 得到两者的毫秒数
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        long day = between / (24 * 60 * 60 * 1000);
        long hour = (between / (60 * 60 * 1000) - day * 24);
        long min = ((between / (60 * 1000)) - day * 24 * 60 - hour * 60);
        long s = (between / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60);
        String yuStr = day + "天" + hour + "小时" + min + "分" + s + "秒";
        return yuStr;
	}
	
	
	
	//与当前日期对比 返回毫秒
	public long comparNow(DateTemplate end)
	{
        DateTemplate date = new DateTemplate();
        Long haomiao=end.getTime()-date.getTime();
        return haomiao;
	}
	
	
	
	public static void main(String[] args) {
		DateTemplate date = new DateTemplate();
//		System.out.println(date.toYyyyStr()) ;
//		System.out.println(date.toMmStr()) ;
//		System.out.println(date.toddStr()) ;
//		System.out.println(date.toHhStr()) ;
//		System.out.println(date.tommStr()) ;
//		System.out.println(date.distanceTime(new Date().addDate(1))) ;
		String strtime="2015-03-12 16:00:00";
//		System.out.println(date.getTime() - this.getTime());
	}


	
}
